
import java.util.Scanner;
//输入需要导入util包
import java.util.Arrays;//数组转字符串
public class Test {
    public static void swap(int[]arr)
    {
        int temp = arr[0];
        arr[0] = arr[1];
        arr[1] = temp;
    }
//    public static int add(int x1,int x2)
//    {
//        System.out.println("int add(int x1,int x2)");
//        return x1+x2;
//    }

    public static double add(int x1,double x2)//参数类型不同
    {
        System.out.println("double add(int x1,double x2)");
        return x1+x2;
    }

    public static double add(int x1,int x2) //--- 返回类型无法构成重载
    {
        return x1+x2;
    }
   public static double add(double x1,int x2)//参数顺序不同
  {
      System.out.println("double add(double x1,int x2)");
      return x1+x2;
  }

    public static int add(int x1,int x2,int x3)//参数个数不同
    {
        System.out.println("int add(int x1,int x2,int x3)");
        return x1+x2+x3;
    }

    public static  int[] copyOf(int[] arr)
    {
        int [] newaddr = new int[arr.length];
        for(int i = 0 ; i < arr.length ; i++)
             newaddr[i] = arr[i];
        return newaddr;
    }

    public static  int[] copyRandgeOf(int[] arr,int start,int end)
    {
        int[] newarr = new int[end-start+1];
        for(int i = 0 ; i < newarr.length;i++)
        {
            newarr[i] = arr[start+i];
        }
        return newarr;
    }

    public static int[] fib(int n)
    {
        if(n <= 0){
            return null;
        }
        int[] array = new int[n];
        array[0] = array[1] = 1;
        for(int i = 2; i < n; ++i){
            array[i] = array[i-1] + array[i-2];
        }
        return array;
    }
    public static void main(String[] args)
    {
      //1. 输出
//      //println
//        System.out.println("hello " + 2025);
//      //print
//        System.out.print("hello " + 2025 + "\n");
//      //printf 格式化输出跟C一样
//        System.out.printf("%x\n",2025);
      //2.输入 --需要先导入util包
//        Scanner sc = new Scanner(System.in);
//        System.out.println("请输入你的名字:");
//        String name = sc.nextLine();
//        System.out.println("请输入你的年龄:");
//        int age = sc.nextInt();
//        System.out.println("请输入你的工资:");
//        float salary = sc.nextFloat();
//        System.out.println("Your information: ");
//        System.out.println("姓名: "+name+"\n"+"年龄: "+ age +"\n"+"工资: "+ salary);
//        sc.close(); //需要调用关闭方法
       //3.案例:使用输入输出求平均值
//       Scanner in = new Scanner(System.in);
//       int num = 0 ;
//       int sum = 0;
//       System.out.println("请输入数据总个数: ");
//       num = in.nextInt();
//        for (int i = 0; i < num; i++)
//        {
//            int temp = in.nextInt();
//            sum += temp;
//        }
//        System.out.println("平均数为: " + (sum/num));
        //4.交换方法
         int [] arr = {1,2};
        System.out.println("交换前，arr[0]:" + arr[0]+"，arr[1]:"+arr[1]);
         swap(arr);
        System.out.println("交换后，arr[0]:" + arr[0]+"，arr[1]:"+arr[1]);
       //5.函数重载
        int a4 = 5;
        int a3 = 3;
        double a5 = 2.0;
        double ret1 = add(a4,a3);//int (int int) int可以被double接收
        double ret2 = add(a3,a4);
         double ret3 = add(a3,a3); //如果没有 add(int,int)会退而求此次选add(int,double) 有现成吃现成
        double ret4 = add(a3,a3);
        //6.数组
        //6.1数组创建
        int[] arr1 = new int[0]; //Java可以创建空栈上的数组但是主义越界,C不行但可以柔性数组
        //System.out.println(arr1[0]);
        double[] arr2 = new double[32];
        //String[] arr3 = new String[10000000000]; -- 最大大小大概为INT_MAX
        //6.2 数组初始化
        int [] arr3 = new int[10]; //动态初始化 --- 直接指定数组中元素个数
        int [] arr4 = new int[]{1,2,3,4}; //静态初始化 --- 不直接指定元素个数 而是直接将具体数据内容指定
        //静态初始化会在编译时根据数据内容确定数组长度
        double [] arr5 = new double[]{2.2,1}; //不一定说{}中数据类型就要与[]前类型一样，也可以放数据类型小的
        System.out.println(arr5[1]);
        //静态初始化其实可以简写，但编译时代码会还原
        int[] arr6 = {1,2,3,4};
        //数组创建时也可以按照C语言风格，但是不建议因为int[]这样更清晰是数组类型
        int arr7[] = {5,12};
        //两种初始化都可以分开写，但是省略格式不行
        String[] s1;
        s1 = new String[2];

        String[] s2;
        s2 = new String[]{"hjello"};

//        String[] s3;
//        s3 = {"asas"};

        //6.3数组如果没有初始化是有默认值的； Java中是没法像C部分初始化的比如int arr[4] = {1,2}
        System.out.println(arr2[1]); //double默认值是0.0
        //6.4 数组的使用 --- 在堆上开辟，那么我用不用释放？？？？
        //（1）for循环
        int[] arr8 = new int[]{1,2,3,4,5};
        for(int i = 0 ; i < arr8.length;i++) //数组对象.length获取数组长度
            System.out.print(arr8[i]+" ");
        System.out.println("");
        //(2)for each -- 其实就是C++11的范围for
         int[] arr9 = {1,2,3,4,5};
         for(int x:arr9) //for each拿不到下标！依赖下标场景就没必要用这个
            System.out.println(x);

        int[] arr10 = {1,2,3,4,5};
        int[] arr11 = {100,200,3,4,5};
        System.out.println("引用前arr11：");
        for (int e : arr11)
            System.out.print(e+" ");
        System.out.println("");
        arr10 = arr11;
        arr10[2] = 300;
        arr10[3] = 400;
        arr10[4] = 500;
        System.out.println("arr10引用后，arr11：");
        for (int e : arr11)
            System.out.print(e+" ");
        System.out.println("");
        //7.Java 中并没有约定 null 和 0 号地址的内存有任何关联
        //if(null == 0)

        //8.数组类型也能作为返回值
        int[] arr12 = fib(20);

        //9.数组转字符串 --- toString 导入util.Arrays
        double[] arr13 = {1.1,2.1,9.9,-1.2};
        String ats = Arrays.toString(arr13);
        System.out.println(ats);
        //10.copyOf进行数组拷贝创建一个新的数组
        int[] arr14 = {1,2,3,4,5};
        int[] newarr = Arrays.copyOf(arr14,arr14.length); //拷贝数组多长
        newarr[2] = 90;
        for (int i = 0; i < newarr.length; i++)
            System.out.print(newarr[i]+" ");
        System.out.println("arr14[2]:"+arr14[2]);
        newarr = Arrays.copyOfRange(arr14,2,4); //按照下标范围拷贝---此时原本拷贝的自动回收
        for (int i = 0; i < newarr.length; i++)
            System.out.print(newarr[i]+" ");
        System.out.println("");
        //11.使用自己实现的拷贝函数
        int[] newarr1 = copyOf(arr14);
        int[] newarr2 = copyRandgeOf(arr14,1,4);
        for (int i = 0; i < newarr1.length; i++)
            System.out.print(newarr1[i]+" ");
        System.out.println("");
        for (int i = 0; i < newarr2.length; i++)
            System.out.print(newarr2[i]+" ");
        System.out.println("");
        //12.排序算法
        int[] arr15 = {9,2,3,10,21};
        System.out.print("排序前：");
        for (int i = 0; i < arr15.length; i++)
            System.out.print(arr15[i]+" ");
        System.out.println("");
        Arrays.sort(arr15);
        System.out.print("排序后：");
        for (int i = 0; i < arr15.length; i++)
            System.out.print(arr15[i]+" ");
        System.out.println("");
        for(int x : arr15)///注意这里修改数组元素内容不影响原数组
            x += 1;
        for (int i = 0; i < arr15.length; i++)
            System.out.print(arr15[i]+" ");
        System.out.println("");
        //13.二维数组
        int[][] toarr = {{1,2},{1,3,9}};
        for(int i = 0 ; i < toarr.length ; i++)
        {
           for(int j = 0 ; j < toarr[i].length ; j++)
               System.out.print(toarr[i][j]+" ");
            System.out.println("");
        }


    }

    public class Dog
    {

    }

}
